package com.example.ercmssystem2.service;

import com.example.ercmssystem2.entity.TaskReport;
import com.example.ercmssystem2.entity.TaskReportPhoto;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface TaskReportService {
    
    // 创建任务完成报告
    TaskReport createCompletionReport(Long eventId, String content, Long reportedBy);
    
    // 创建任务完成报告（包含照片）
    TaskReport createCompletionReportWithPhotos(Long eventId, String content, Long reportedBy, List<MultipartFile> photos, List<String> descriptions);
    
    // 更新任务报告
    TaskReport updateReport(Long reportId, String content, Long reportedBy);
    
    // 更新任务报告（包含照片）
    TaskReport updateReportWithPhotos(Long reportId, String content, Long reportedBy, List<MultipartFile> photos, List<String> descriptions);
    
    // 根据ID查找报告
    TaskReport findById(Long id);
    
    // 查找事件的所有报告
    List<TaskReport> findByEventId(Long eventId);
    
    // 查找事件的最新完成报告
    TaskReport findLatestCompletionReport(Long eventId);
    
    // 保存报告
    TaskReport saveReport(TaskReport report);
    
    // 删除报告
    void deleteReport(Long id);
    
    // 查找用户的所有报告
    List<TaskReport> findByReportedBy(Long reportedBy);
    
    // 查找特定时间范围内的报告
    List<TaskReport> findByReportTimeBetween(LocalDateTime start, LocalDateTime end);
    
    // 统计事件报告数量
    long countByEventId(Long eventId);
    
    // 获取报告统计信息（只返回总数）
    Map<String, Object> getReportStatistics(Long eventId);
    
    // 照片相关方法
    TaskReportPhoto uploadPhoto(Long reportId, MultipartFile file, String description, Long uploadedBy);
    
    List<TaskReportPhoto> getReportPhotos(Long reportId);
    
    TaskReportPhoto getPhotoById(Long photoId);
    
    void deletePhoto(Long photoId, Long userId);
    
    // 管理功能相关方法
    
    // 根据条件查找报告（分页）
    List<TaskReport> findReportsWithFilters(Long eventId, Long reporterId, LocalDateTime start, LocalDateTime end, int page, int size);
    
    // 根据条件统计报告数量
    long countReportsWithFilters(Long eventId, Long reporterId, LocalDateTime start, LocalDateTime end);
    
    // 获取报告统计信息（包含时间统计）
    Map<String, Object> getReportStatistics();
} 